<?xml version="1.0" encoding="UTF-8"?>

<!--#################################################################################
    
    Uebersetze MediathekABK in ein besseres Format
    
    Warum XSLT: Es handelt sich hierbei um die Transformation einer einzelnen Datei,
        dafuer ist XSLT besser geeignet.

##################################################################################-->

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    
	<xsl:output method="xml" indent="yes"/>
	
	<xsl:template match="plist">
		<xsl:element name="Mediathek">
			
			<xsl:element name="MetaData">
				<xsl:for-each select="dict">
					<xsl:for-each select="key[(not(.='Tracks'))and(not(.='Playlists'))]">
						<xsl:sort select="." />
						<xsl:apply-templates select="." />
					</xsl:for-each>
				</xsl:for-each>
			</xsl:element>
			
			<xsl:element name="TrackArea">
				<xsl:for-each select="dict/dict[preceding::key='Tracks']/dict">
					<xsl:element name="Track">
						<xsl:for-each select="key">
							<xsl:sort select="." />
							<xsl:apply-templates select="." />
						</xsl:for-each>
					</xsl:element>
				</xsl:for-each>
			</xsl:element>
			
			<xsl:element name="Playlists">
				<xsl:for-each select="dict/array[preceding::key='Playlists']/dict">
					<xsl:element name="Playlist">
						<xsl:for-each select="key[not(.='Playlist Items')]">
							<xsl:sort select="." />
							<xsl:apply-templates select="." />
						</xsl:for-each>
						<xsl:element name="PlaylistItems">
							<xsl:for-each select="array/dict/integer">
								<xsl:element name="TrackIDRef">
									<xsl:attribute name="type">
										<xsl:text>integer</xsl:text>
									</xsl:attribute>
									<xsl:value-of select="."/>
								</xsl:element>
							</xsl:for-each>
						</xsl:element>
					</xsl:element>
				</xsl:for-each>
			</xsl:element>
			
		</xsl:element>
	</xsl:template>
	
	<xsl:template match="*">
		<xsl:variable name="tagName"><xsl:value-of select="."/></xsl:variable>
		<xsl:variable name="typeName"><xsl:value-of select="name(following::*[1])"/></xsl:variable>
		<xsl:choose>
			<xsl:when test="($typeName='true')or($typeName='false')">
				<xsl:element name="{translate($tagName, ' ', '')}">
					<xsl:attribute name="type"><xsl:text>boolean</xsl:text></xsl:attribute>
					<xsl:value-of select="$typeName"/>
				</xsl:element>
			</xsl:when>
			<xsl:otherwise>
				<xsl:element name="{translate($tagName, ' ', '')}">
					<xsl:attribute name="type">
						<xsl:value-of select="$typeName"/>
					</xsl:attribute>
					<xsl:value-of select="following::*[1]"/>
				</xsl:element>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
    
</xsl:transform>
